//
//	A View that Frames its Subview -- pretty ungeneral
//      Randy Nelson, NeXT Developer Training
//	Created 5-1-90
//	Modified for 2.0 9-3-90
//
//	You may freely copy, distribute and reuse the code in this example.
//	NeXT disclaims any warranty of any kind, expressed or implied, as to
//	its fitness for any particular use.
//

#import "SubViewFramer.h"
#import <dpsclient/wraps.h>
#import <appkit/graphics.h>
#import "VisibleOne.h"

#define FACTOR 2

@implementation SubViewFramer

//sets clipping off
- initFrame:(const NXRect *)r
{
    [super initFrame:r];
    [self setClipping:NO];
    return self;
}

//called by the visible view to frame itÐtransparently if requested
- frameMe:sender
{
    NXRect subViewsFrame, myFrame;
    NXSize myFrameFactored;
    float subViewsFrameAngle;
    
    [self lockFocus];
    PSsetgray(0.5);
    
    //gets the subview's frame and rotation
    [sender getFrame:&subViewsFrame];
    subViewsFrameAngle = [sender frameAngle];
    
    //necessary to rotate around the same point the subview used if rotated
    if(subViewsFrameAngle != 0){
	PStranslate(subViewsFrame.origin.x, subViewsFrame.origin.y);
	PSrotate(subViewsFrameAngle);
	PStranslate(-subViewsFrame.origin.x, -subViewsFrame.origin.y);
    }
    
    //sets the alpha if sender wants a transparent superview
    if ([sender wantsTransparency]){
	PSsetalpha(NX_DKGRAY);
    }
    
    //the superview needs to completely cover the window
    //even when rotated
    [self getFrame:&myFrame];
    myFrameFactored.width = (myFrame.size.width * FACTOR);
    myFrameFactored.height =  (myFrame.size.height * FACTOR);
    
    //left side
    PScompositerect(-(myFrameFactored.width), -(myFrameFactored.height),
		    ((myFrameFactored.width) + subViewsFrame.origin.x),
		    (myFrameFactored.height * 2), NX_SOVER);

    //top middle
    PScompositerect(subViewsFrame.origin.x,
    		    (subViewsFrame.origin.y + subViewsFrame.size.height),
		    subViewsFrame.size.width,
		    ((myFrameFactored.height)
		    - (subViewsFrame.origin.y + subViewsFrame.size.height)),
		    NX_SOVER);

    //right side
    PScompositerect((subViewsFrame.origin.x + subViewsFrame.size.width), 
		    -(myFrameFactored.height),
		    ((myFrameFactored.width)
		    - (subViewsFrame.origin.x + subViewsFrame.size.width)),
		    (myFrameFactored.height * 2), NX_SOVER);

    //bottom middle
    PScompositerect(subViewsFrame.origin.x, -(myFrameFactored.height),
    subViewsFrame.size.width,
    ((myFrameFactored.height) + subViewsFrame.origin.y), NX_SOVER);

    //enclose the subview's frame
    PSsetgray(NX_BLACK);
    PSsetalpha(1.0);
    NXFrameRect(&subViewsFrame);	

    [self unlockFocus];
    return self;
}

@end
